标准库头文件
标准库的功能是通过一组标准头文件给出的(16.1.2节)。标准库头文件不需要后缀;它们被当做头文件是因为它们需要用#include<...>
包含进来,而不是用#include"..."。缺少 .h
后缀并不意味着这些头文件必须采用某种特殊的存储方式。一个具体实现可以利用有关标准库定义的知识,去优化标准库的实现以及对标准头文件的处理方式。比如说,某个实现可以将标准数学库(22.3节)做成内部的,且将#include<cmath>
当做一个开关,在使数学库能够使用的同时又不需要读入任何文件。
相对于每一个C标准库文件 <X.h>
,存在着一个与之对应的标准C++头文件 <cX>
。例如,#include <cstdio>
提供的是与#include <stdio.h>
同样的东西。一个典型的<stdio.h>
看起来是某种类似下面的东西
#ifdef __cplusplus // 只为了C++编译器(9.2.4节)
namespace std { // 标准库定义在名字空间std里(8.2.9节)
extern "C" { // 在stdio里的函数具有C连接(9.2.4节)
#endif
/* ... */
int printf(const char* ...);
/* ... */
#ifdef __cplusplus
}
}
using namespace std; // 使printf在全局名字空间里可以使用
#endif
也就是说,实际声明(基本上)都是共享的,但连接和名字空间问题则需要另行处理,以便使C和C++程序能共享这个头文件。
🔚